package priv.conceit.study.book.lambda.chapter2;

/**
 * * 2.4函数接口
 * FunctionInterfaceExec
 * 函数接口方法调用
 *
 * 我们常见的三种引用类型：
 *
 * 静态方法引用     ClassName::methodName
 * 实例上的实例方法引用     instanceReference::methodName
 * 类型上的实例方法引用     ClassName::methodName
 *
 * @author conceit
 * @date 2021/9/2 11:10
 */
public class FunctionInterfaceExec {




    public static void main(String[] args) {
        //System.out::println 方法引用
        //str -> System.out.println(input)
        //arg为参数名 编译器会根据程序的上下文(FunctionInterface 的方法签名)在 后台推导出参数arg的类型

        execLambda("666",System.out::println);
        String arg="fuck";
        execLambda("fuck", arg2 -> System.out.println(arg2));
        execAnonymity("fuck u execAnonymity");
    }


    /**
     * 按照原来的匿名内部类的写法
     */
    public static void execAnonymity(String input){
        FunctionInterfaceExec functionInterfaceExec=new FunctionInterfaceExec();
        functionInterfaceExec.execLambda(input,new FunctionInterface() {
            @Override
            public void println(String input) {
                System.out.println(input);
            }
        });
    }


    /**
     *
     * lambda写法
     *
     * @param functionInterface
     */
    public static void execLambda(String str,FunctionInterface functionInterface){
        functionInterface.println(str);
    }
}
